#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define F first
#define S second
// Define here .
const int N = 3e5+10;
vector<pair <int,ll > > adj[N];
ll w[N],dp[N][2];
int n;
ll D=0;
void dfs(int u,int p)
{
dp[u][0]=dp[u][1]=w[u];
for(auto v:adj[u])
{
if(v.F==p)
continue;
dfs(v.F,u);
dp[u][1]=max(dp[u][1],dp[v.F][0]+dp[u][0]-v.S);
dp[u][0]=max(dp[u][0],dp[v.F][0]+w[u]-v.S);
}
D =max(D,max(dp[u][0],dp[u][1]));
}
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=1;i<=n;i++)
cin>>w[i];
for(int i=1;i<n;i++)
{
int x,y,w;
cin>>x>>y>>w;
adj[x].pb({y,w});
adj[y].pb({x,w});
}
dfs(1,-1);
cout<<D;
return 0;
}
647. Palindromic Substrings | 583. Delete Operation for Two Strings |
518. Coin Change 2 | 516. Longest Palindromic Subsequence |
468. Validate IP Address | 450. Delete Node in a BST |
445. Add Two Numbers II | 442. Find All Duplicates in an Array |
437. Path Sum III | 436. Find Right Interval |
435. Non-overlapping Intervals | 406. Queue Reconstruction by Height |
380. Insert Delete GetRandom O(1) | 332. Reconstruct Itinerary |
368. Largest Divisible Subset | 377. Combination Sum IV |
322. Coin Change | 307. Range Sum Query - Mutable |
287. Find the Duplicate Number | 279. Perfect Squares |
275. H-Index II | 274. H-Index |
260. Single Number III | 240. Search a 2D Matrix II |
238. Product of Array Except Self | 229. Majority Element II |
222. Count Complete Tree Nodes | 215. Kth Largest Element in an Array |
198. House Robber | 153. Find Minimum in Rotated Sorted Array |